/**
 * 资源引用关系可视化组件
 */

// 资源引用组件
const cloudHelper = require('../../../helpers/cloud_helper.js');

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    // 资源ID
    resourceId: {
      type: String,
      value: ''
    },
    
    // 资源名称
    resourceName: {
      type: String,
      value: ''
    },
    
    // 资源类型
    resourceType: {
      type: String,
      value: ''
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    // 引用该资源的项目列表
    referenceProjects: [],
    
    // 节点位置数据
    nodePositions: [],
    
    // 加载状态
    isLoading: true,
    
    // 错误信息
    error: null,
    
    // 是否展开详情
    isExpanded: false
  },

  /**
   * 生命周期函数
   */
  lifetimes: {
    attached() {
      this.loadData();
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 加载引用关系数据
     */
    async loadData() {
      if (!this.properties.resourceId) {
        this.setData({
          isLoading: false,
          error: '缺少资源ID'
        });
        return;
      }

      this.setData({ 
        isLoading: true, 
        error: null,
        references: [] 
      });

      try {
        // 使用云函数替代Biz调用
        const references = await cloudHelper.callCloudData('research/resource_references', {
          resourceId: this.properties.resourceId
        });
        
        // 计算节点位置
        const nodePositions = this._calculateNodePositions(references.length);
        
        this.setData({
          referenceProjects: references,
          nodePositions,
          isLoading: false
        });
      } catch (err) {
        console.error('获取资源引用关系失败', err);
        this.setData({
          isLoading: false,
          error: '加载引用关系失败: ' + (err.message || '未知错误')
        });
      }
    },
    
    /**
     * 计算节点位置
     * @param {Number} count 节点数量
     * @returns {Array} 节点位置数组
     */
    _calculateNodePositions(count) {
      const positions = [];
      
      for (let i = 0; i < count; i++) {
        const angle = i * (2 * Math.PI / count);
        // 计算每个节点的位置
        positions.push({
          rotation: i * (360 / count),
          top: 50 - 35 * Math.cos(angle),
          left: 50 + 35 * Math.sin(angle)
        });
      }
      
      return positions;
    },

    /**
     * 刷新引用数据
     */
    refreshData() {
      this.loadData();
    },

    /**
     * 展开/收起详情
     */
    toggleExpand() {
      this.setData({
        isExpanded: !this.data.isExpanded
      });
    },

    /**
     * 跳转到项目详情
     */
    navigateToProject(e) {
      const projectId = e.currentTarget.dataset.id;
      if (!projectId) return;
      
      wx.navigateTo({
        url: `/projects/plm/pages/project/detail/project_detail?id=${projectId}&tab=info`
      });
    }
  }
}) 